1. Field of the Invention
The present invention relates to computer software systems. More particularly, the invention concerns techniques for defining and applying patterns to or within a software system to cause the system to be structured or behave in a manner dictated by or consistent with the patterns.
2. Description of the Prior Art
In the field of design, a pattern represents an abstract solution that can be brought to bear on a recurring design problem. In formal terms, a pattern can be said to represent a common solution to a common problem in a given context. In the context of software development, patterns are used extensively to solve small and large-scale problems in the design, modeling, implementation, deployment, and maintenance of software systems. The application of a pattern to or within a software system causes the system to be structured and to behave in certain ways dictated by or consistent with the pattern. The application of a pattern generally occurs by acting upon software artifacts, such as object-oriented classes, through one or more explicit or implicit meta-models that describe the artifacts and allow their manipulation. Each pattern represents a form of reusable asset that encapsulates the relationship and/or interaction between a set of artifacts.
The purpose of a pattern is to facilitate consistent solutions to similar problems so as to simplify the overall design effort and reduce error. Each pattern represents a software solution that solves a repetitive problem within a given context. Creating and using patterns thus promotes software reuse. A pattern can be designed once and used many times. Such reuse tends to lower production costs and save time by eliminating redesign. Pattern reuse also affords higher software reliability and continuity to code design.
Although the concept of patterns originated in the field of architecture and municipal design, patterns are now extensively used for software design. Certain patterns or classes of patterns are recognized across the software industry. At the heart of these industry-accepted software patterns are twenty-three patterns that were first identified in the seminal work on this subject: Design Patterns: Elements of Reusable Object-Oriented Software, by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides (Addison-Wesley 1995).
Due to their wide acceptance within the software industry, the foregoing twenty-three patterns (and other standard patterns), have been automated in their implementation by software development tools that allow the patterns to be incorporated by pattern users into software designs. Although such automation of standard patterns is beneficial, a no less important feature of software development tools is the ability to support the definition of new patterns by end users of the tools. New patterns may be required to enforce programming paradigms, standards or conventions within an organization or to provide general accelerators for the development of applications. In many cases, the patterns developed by an organization can constitute significant intellectual property and can be critical in enabling asset-based development for an on-demand business.
Conventional pattern authoring tools tend to support the creation of new patterns by allowing the pattern author to specify pattern implementation algorithms in one or more interpreted or directly executed languages that may be textually or visually constructed. Examples of such languages are scripting languages, constraint and rule languages, special purpose programming languages, and visual modeling languages such as UML (Unified Modeling Language) or the like. Unfortunately, tools that support the creation of patterns using such techniques often introduce significant restrictions on the generality and flexibility of the patterns that can be implemented. Defining patterns in such languages may be unsupported or difficult. If custom languages are used in pattern creation, then new concepts, tools, or development paradigms may also be involved.
Automated tools for applying patterns in a software project (sometimes referred to as pattern instantiation) can also be cumbersome and confusing insofar as they tend to be based on batch mode techniques wherein patterns are applied by specifying all of a pattern's parameter arguments or values at one time. As far as known, current tools do not provide the capability to extend the use of a pattern once it has already been instantiated in the user's code.
It is to improvements in the area of computer software pattern implementation that the present invention is directed. In particular, what are needed are improved tools for pattern definition and application.